extern int Push (double *topePila, int tamanioPila, int *cantidadElementos, double valor);
extern int Pop (double *topePila, int tamanioPila, int *cantidadElementos, double *valor);
extern int SumarTodosLosElementos (double *topePila, int tamanioPila, int *cantidadElementos, double *resultadoSuma);

#define TAMANIO_PILA 4
#define EPSILON 0.0000000001 	// for double comparison

int sonIguales (double a, double b){
	return (fabs(a - b) < EPSILON);
}

int main (void){

	double pila[TAMANIO_PILA];
	int resultado = 0;
	double resultadoSuma = 0;
	int cantidadElementos = 0;
	double elemento;

	/* Prueba 1: Suma de una pila vacía debería dar */
	resultado = SumarTodosLosElementos (pila, TAMANIO_PILA, &cantidadElementos, &resultadoSuma);
	if (sonIguales (resultadoSuma,0)) printf ("Prueba 1: OK\n");
	else printf ("Prueba 1: ERROR. Da %f y se esperaba 0\n", resultadoSuma);

	/* Prueba 2: Suma de una pila de un elemento */
	resultadoSuma = 0;
	Push (pila, TAMANIO_PILA, &cantidadElementos, 1.5);
	resultado = SumarTodosLosElementos (pila, TAMANIO_PILA, &cantidadElementos, &resultadoSuma);
	if (sonIguales(resultadoSuma, 1.5)) printf ("Prueba 2: OK\n");
	else printf ("Prueba 2: ERROR. Da %f y se esperaba 1.5\n", resultadoSuma);

	/* Prueba 3: Suma de una pila de dos elementos */
	resultadoSuma = 0;
	Push (pila, TAMANIO_PILA, &cantidadElementos, 81.1);
	resultado = SumarTodosLosElementos (pila, TAMANIO_PILA, &cantidadElementos, &resultadoSuma);
	if (sonIguales(resultadoSuma, 82.6)) printf ("Prueba 3: OK\n");
	else printf ("Prueba 3: ERROR. Da %f y se esperaba 82.6\n", resultadoSuma);

	/* Prueba 4: Suma de una pila de tres elementos */
	resultadoSuma = 0;
	Push (pila, TAMANIO_PILA, &cantidadElementos, -3.5);
	resultado = SumarTodosLosElementos (pila, TAMANIO_PILA, &cantidadElementos, &resultadoSuma);
	if (sonIguales(resultadoSuma, 79.1)) printf ("Prueba 4: OK\n");
	else printf ("Prueba 4: ERROR. Da %f y se esperaba 79.1\n", resultadoSuma);

	/* Prueba 5: Suma de una pila tras quitar un elemento */
	resultadoSuma = 0;
	Pop (pila, TAMANIO_PILA, &cantidadElementos, &elemento);
	resultado = SumarTodosLosElementos (pila, TAMANIO_PILA, &cantidadElementos, &resultadoSuma);
	if (sonIguales(resultadoSuma, 82.6)) printf ("Prueba 5: OK\n");
	else printf ("Prueba 5: ERROR. Da %f y se esperaba 82.6\n", resultadoSuma);

	/* Prueba 6: Suma de una pila completa */
	resultadoSuma = 0;
	Push (pila, TAMANIO_PILA, &cantidadElementos, 71.5);
	Push (pila, TAMANIO_PILA, &cantidadElementos, -8.3);
	resultado = SumarTodosLosElementos (pila, TAMANIO_PILA, &cantidadElementos, &resultadoSuma);
	if (sonIguales(resultadoSuma, 145.8)) printf ("Prueba 6: OK\n");
	else printf ("Prueba 6: ERROR. Da %f y se esperaba 145.8\n", resultadoSuma);
	
}
